/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author nvc11190
 */
public class TableModel extends AbstractTableModel {
    //Khai báo 2 vector Object để sử dụng cho JTable
    private Vector colHeaders; //Chứa thông tin tên các Field dùng làm columnheader
    private Vector tbData; //Phần chứa dữ liệu
    
    //Constructor truyền vào 1 ResultSet để gán dữ liệu cho JTable có Model tham chiếu tới
    public TableModel(ResultSet rs) throws SQLException{
       ResultSetMetaData rsMeta = rs.getMetaData(); //đọc metadata của ResultSet
       int count = rsMeta.getColumnCount(); //xác định số field trong resultset
       colHeaders = new Vector(count); //Khởi tạo vector chứa Columnheader
       tbData = new Vector();
       //lặp tương ứng với số phần tử của columnheader để lấy tên của từng cột
       for (int i=1; i<=count; i++){
           colHeaders.addElement(rsMeta.getColumnName(i));
       }
       //lặp từ record đầu đến record cuối resultset để lấy dữ liệu add vào table
       while(rs.next()){
           //khai báo 1 vector để chứa dữ liệu
           Vector dataRow = new Vector(count);
           //lấy thông tin
           for(int i=1; i<=count; i++)
           {
               dataRow.addElement(rs.getObject(i));
           }
           tbData.addElement(dataRow);
       }
    }
    //định nghĩa phương thức lấy số cột 
    @Override
    public int getColumnCount(){
        return colHeaders.size();
    }

    @Override
    public int getRowCount() {
        return tbData.size();
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Vector rowData = (Vector)(tbData.elementAt(rowIndex));
        return rowData.elementAt(columnIndex);
}
    @Override
     public String getColumnName(int column) {
        return (String) colHeaders.elementAt(column);
    }

}
